package org.example.util.file;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

/**
 * @auther admin闫
 * @Descriptopn 图片上文字操作工具类
 * @date 2024/4/4 18:24
 */
public class PhotoTextUtil {

    /**
     * //加载需要的字体（系统没有的）
     */
    public static void initFount (){
        try {
            // 加载字体
            Font customFont = Font.createFont(Font.TRUETYPE_FONT, new File("H:\\毕业设计工作目录\\batch_processing\\batch_processing\\测试\\A06汉仪菱心体简.ttf")).deriveFont(12f);
            GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
            // 注册字体
            ge.registerFont(customFont);
            System.out.println("字体加载成功：" + customFont.getFontName());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 打印系统支持的字体名称
     */
    public static void printFountName(){
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        String[] fontNames = ge.getAvailableFontFamilyNames();
        System.out.println(fontNames.length);
        for (String fontName : fontNames) {
            System.out.println(fontName);
        }
    }

    /**
     * 向图片中写入文字，横向居中【需要手改指定字体样式】
     * @param imageDir 图片地址
     * @param text 文本
     * @param y 位置高度
     * @param outDir 输出地址
     * @throws IOException 读取/输出异常
     * @return 输出文件的地址
     * 1920 上中下格式 ：440  980  1520
     */
    public static String writeTextCenterWidth(String imageDir,String text,int y,String outDir) throws IOException {
        //设置要用的字体
        PhotoTextUtil.initFount();
        // 加载目标PNG背景图像
        BufferedImage pngBackground = ImageIO.read(new File(imageDir));
        // 获取PNG图像的宽度和高度
        int width = pngBackground.getWidth();
        int height = pngBackground.getHeight();
        Graphics2D g = pngBackground.createGraphics();
        // 设置字体样式和大小
        Font font = new Font("A06", Font.PLAIN, 150);
        g.setFont(font);
        // 设置字体颜色为白色
        g.setColor(Color.WHITE);
        // 获取字体绘制的矩形区域
        FontMetrics metrics = g.getFontMetrics(font);
        Rectangle2D textBounds = metrics.getStringBounds(text, g);
        // 计算文字绘制的位置
        int x = (width - (int) textBounds.getWidth()) / 2; // 居中
        // 绘制文字
        g.drawString(text, x, y);
        // 保存绘制好的图片
        ImageIO.write(pngBackground, "PNG", new File(outDir));
        // 释放资源
        g.dispose();
        return outDir;
    }








}
